<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
   
   <meta name="description" content="string operations">
    
    <meta name="author" content="John S. Urban" >
    <link rel="icon" href="../favicon.png">

    <title>len_white &ndash; M_strings</title>

    <link href="../css/bootstrap.min.css" rel="stylesheet">
    <link href="../css/pygments.css" rel="stylesheet">
    <link href="../css/font-awesome.min.css" rel="stylesheet">
    <link href="../css/local.css" rel="stylesheet">
    
    <link  href="../tipuesearch/tipuesearch.css" rel="stylesheet">
    
    

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    
    <script src="../js/jquery-2.1.3.min.js"></script>
    <script src="../js/svg-pan-zoom.min.js"></script>

  </head>

  <body>

    <!-- Fixed navbar -->
    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="../index.html">M_strings </a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
        
            <li class="dropdown hidden-xs visible-sm visible-md hidden-lg">
              <a href="#" class="dropdown-toggle"
              data-toggle="dropdown" role="button"
              aria-haspopup="true"
     aria-expanded="false">Contents <span class="caret"></span></a>
        <ul class="dropdown-menu">
          
              
            <li><a href="../lists/files.html">Source Files</a></li>
        
        
        
            <li><a href="../lists/modules.html">Modules</a></li>
        
            
                                
            <li><a href="../lists/procedures.html">Procedures</a></li>
        
               
            <li><a href="../lists/types.html">Derived Types</a></li>
        
        
            </ul>
            </li>


<li class="visible-xs hidden-sm visible-lg"><a href="../lists/files.html">Source Files</a></li>



<li class="visible-xs hidden-sm visible-lg"><a href="../lists/modules.html">Modules</a></li>



<li class="visible-xs hidden-sm visible-lg"><a href="../lists/procedures.html">Procedures</a></li>

                             
<li class="visible-xs hidden-sm visible-lg"><a href="../lists/types.html">Derived Types</a></li>


          </ul>
        
        <form action="../search.html" class="navbar-form navbar-right" role="search">
        <div class="form-group">
          <input type="text" class="form-control" placeholder="Search" name="q" id="tipue_search_input" autocomplete="off" required>
        </div>
<!--
        <button type="submit" class="btn btn-default">Submit</button>
-->
        </form>
        
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <div class="container">
    
  
  <div class="row">
    <h1>len_white
      <small>Function</small>
    
    </h1>
    
<div class="row">
  <div class="col-lg-12">
<div class="well well-sm">
  <ul class="list-inline" style="margin-bottom:0px;display:inline">
     
     
     
     
    
    
     <li><i class="fa fa-list-ol"></i>
       <a data-toggle="tooltip"
    data-placement="bottom" data-html="true"
    title=" 0.6% of total for procedures.">16 statements</a>
     </li> 
     
     
     
    <li><i class="fa fa-code"></i><a href="../src/M_strings.f90"> Source File</a></li>
     
     
  </ul>
  <ol class="breadcrumb in-well text-right">
  
    
     <li><a href='../sourcefile/m_strings.f90.html'>M_strings.f90</a></li>
    
     <li><a href='../module/m_strings.html'>M_strings</a></li>
    
  
     <li class="active">len_white</li>
  </ol>
</div>
</div>
</div>
<script>
  $(function () {
  $('[data-toggle="tooltip"]').tooltip()
  })
</script>

  </div>
  
  <div class="row">
    <div class="col-md-3 hidden-xs hidden-sm visible-md visible-lg">
    
<div id="sidebar">
  
<h3>Contents</h3>
 



<div class="panel panel-primary">
  <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#vars-0">Variables</a></h3></div>
  <div id="vars-0" class="panel-collapse collapse">
    <div class="list-group">
      
      <a class="list-group-item" href="../proc/len_white.html#variable-i10">i10</a>
      
    </div>
  </div>
</div>




















<div class="panel panel-primary">
  <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div>
  <div class="list-group">
    <a class="list-group-item" href="../proc/len_white.html#src">len_white</a>
  </div>
</div>



</div>

    </div>
    
    <div class="col-md-9" id='text'>
    <h2>
public elemental function len_white(string)
    
    
   
</h2>
    
  


    
    <h2 id="name">NAME</h2>
<div class="codehilite"><pre><span></span><code>  len_white(3f) - [M_strings:LENGTH] get length of string trimmed
  of whitespace.
  (LICENSE:PD)
</code></pre></div>

<h2 id="synopsis">SYNOPSIS</h2>
<div class="codehilite"><pre><span></span><code>integer function len_white(string)

 character(len=*) :: string
</code></pre></div>

<h2 id="description">DESCRIPTION</h2>
<div class="codehilite"><pre><span></span><code>  len_white(3f) returns the position of the last character in
  string that is not a whitespace character. The Fortran90 intrinsic
  LEN_TRIM() should be used when trailing whitespace can be assumed
  to always be spaces.

  This procedure was heavily used in the past because ANSI FORTRAN
  77 character objects are fixed length and blank padded and the
  LEN_TRIM() intrinsic did not exist. It should now be used only when
  whitespace characters other than blanks are likely.
</code></pre></div>

<h2 id="options">OPTIONS</h2>
<div class="codehilite"><pre><span></span><code>  string     input string whose trimmed length is being calculated
             ignoring all trailing whitespace characters.
</code></pre></div>

<h2 id="returns">RETURNS</h2>
<div class="codehilite"><pre><span></span><code>  len_white  the number of characters in the trimmed string
</code></pre></div>

<h2 id="example">EXAMPLE</h2>
<p>Sample Program:</p>
<div class="codehilite"><pre><span></span><code><span class="n">program</span> <span class="n">demo_len_white</span>

  <span class="n">use</span> <span class="n">M_strings</span><span class="p">,</span> <span class="n">only</span> <span class="p">:</span> <span class="n">len_white</span>
  <span class="n">implicit</span> <span class="n">none</span>
  <span class="n">character</span><span class="p">(</span><span class="n">len</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span> <span class="p">::</span>  <span class="n">s</span>
  <span class="n">integer</span>           <span class="p">::</span> <span class="n">lgth</span><span class="p">,</span> <span class="n">lastnb</span>
  <span class="n">intrinsic</span> <span class="n">len</span>

  <span class="n">s</span><span class="o">=</span><span class="s1">&#39; ABCDEFG abcdefg &#39;</span>
  <span class="n">lgth</span> <span class="o">=</span> <span class="n">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
  <span class="n">lastnb</span> <span class="o">=</span> <span class="n">len_white</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>

  <span class="n">write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">&#39;total length of variable is &#39;</span><span class="p">,</span><span class="n">lgth</span>
  <span class="n">write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">&#39;trimmed length of variable is &#39;</span><span class="p">,</span><span class="n">lastnb</span>
  <span class="n">write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span> <span class="s1">&#39;trimmed string=[&#39;</span><span class="p">,</span><span class="n">s</span><span class="p">(:</span><span class="n">lastnb</span><span class="p">),</span><span class="s1">&#39;]&#39;</span>

 <span class="n">end</span> <span class="n">program</span> <span class="n">demo_len_white</span>
</code></pre></div>

<h2 id="notes">NOTES</h2>
<p>o len_white</p>
<div class="codehilite"><pre><span></span><code>  <span class="nv">is</span> <span class="nv">a</span> <span class="nv">resource</span><span class="o">-</span><span class="nv">intensive</span> <span class="nv">routine</span>. <span class="nv">Once</span> <span class="nv">the</span> <span class="k">end</span> <span class="nv">of</span>
  <span class="nv">the</span> <span class="nv">string</span> <span class="nv">is</span> <span class="nv">found</span>, <span class="nv">it</span> <span class="nv">is</span> <span class="nv">probably</span> <span class="nv">best</span> <span class="nv">to</span> <span class="nv">keep</span> <span class="nv">track</span> <span class="nv">of</span> <span class="nv">it</span> <span class="nv">in</span>
  <span class="nv">order</span> <span class="nv">to</span> <span class="nv">avoid</span> <span class="nv">repeated</span> <span class="nv">calls</span> <span class="nv">to</span> <span class="nv">len_white</span>. <span class="nv">Because</span> <span class="nv">they</span>
  <span class="nv">might</span> <span class="nv">be</span> <span class="nv">more</span> <span class="nv">efficient</span>, <span class="nv">consider</span> <span class="nv">looking</span> <span class="k">for</span> <span class="nv">vendor</span><span class="o">-</span><span class="nv">supplied</span> <span class="nv">or</span>
  <span class="nv">system</span><span class="o">-</span><span class="nv">optimized</span> <span class="nv">equivalents</span>. <span class="k">For</span> <span class="nv">example</span>:

     <span class="nv">o</span> <span class="nv">lnblnk</span> <span class="o">-</span> <span class="nv">Solaris</span> <span class="nv">f77</span>
     <span class="nv">o</span> <span class="nv">len_trim</span> <span class="o">-</span> <span class="nv">FORTRAN</span> <span class="mi">90</span>
</code></pre></div>

<p>o Some compilers seem to have trouble passing a string of variable
   length properly. To be safe, use something like this:</p>
<div class="codehilite"><pre><span></span><code>   <span class="n">subroutine</span> <span class="n">message</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
    <span class="n">character</span><span class="p">(</span><span class="n">len</span><span class="o">=*</span><span class="p">)</span> <span class="p">::</span> <span class="n">s</span> <span class="o">!</span> <span class="n">s</span> <span class="k">is</span> <span class="n">of</span> <span class="n">variable</span> <span class="n">length</span>
       <span class="n">lgth</span><span class="o">=</span><span class="n">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>        <span class="o">!</span> <span class="n">get</span> <span class="n">total</span> <span class="n">length</span> <span class="n">of</span> <span class="n">variable</span>
       <span class="o">!</span> <span class="n">explicitly</span> <span class="n">specify</span> <span class="n">a</span> <span class="n">substring</span> <span class="n">instead</span> <span class="n">of</span> <span class="n">just</span> <span class="n">variable</span> <span class="n">name</span>
       <span class="n">lastnb</span> <span class="o">=</span> <span class="n">len_white</span><span class="p">(</span><span class="n">s</span><span class="p">(:</span><span class="n">lgth</span><span class="p">))</span>
       <span class="n">write</span><span class="p">(</span><span class="o">*</span><span class="p">,</span><span class="o">*</span><span class="p">)</span><span class="s1">&#39;error:[&#39;</span><span class="p">,</span><span class="n">s</span><span class="p">(:</span><span class="n">lastnb</span><span class="p">),</span><span class="s1">&#39;]&#39;</span>
   <span class="n">end</span> <span class="n">subroutine</span> <span class="n">messages</span>
</code></pre></div>

<h2 id="author">AUTHOR</h2>
<div class="codehilite"><pre><span></span><code>John S. Urban
</code></pre></div>

<h2 id="license">LICENSE</h2>
<div class="codehilite"><pre><span></span><code>Public Domain
</code></pre></div>
    

    <h3>Arguments</h3>
    
      
<table class="table table-striped varlist">
<thead><tr><th>Type</th>
<th>Intent</th><th>Optional</th>
<th>Attributes</th><th></th><th>Name</th><th></th></thead>



<tbody>

  
  
  
  
<tr>
  
  <td><span class="anchor" id="variable-string~6"></span>character(len=*),</td>
  <td>intent(in)</td>
  <td></td>
  
  <td></td><td>::</td>
  <td><strong>string</strong></td><td></td>
  
</tr>

</tbody>
</table>

    
    
    
    
    
    
    
   <h3>Return Value <small><span class="anchor" id="variable-len_white"></span>integer
  </small></h3>
    
    
    
    
     
    <br>

    <section class="visible-xs visible-sm hidden-md">
      
<h3>Contents</h3>
 



<div class="panel panel-primary">
  <div class="panel-heading text-left"><h3 class="panel-title"><a data-toggle="collapse" href="#vars-1">Variables</a></h3></div>
  <div id="vars-1" class="panel-collapse collapse">
    <div class="list-group">
      
      <a class="list-group-item" href="../proc/len_white.html#variable-i10">i10</a>
      
    </div>
  </div>
</div>




















<div class="panel panel-primary">
  <div class="panel-heading text-left"><h3 class="panel-title">Source Code</h3></div>
  <div class="list-group">
    <a class="list-group-item" href="../proc/len_white.html#src">len_white</a>
  </div>
</div>



    </section>
    <br class="visible-xs visible-sm hidden-md">

    

    
    <section>    
      <h2>Variables</h2>
    
<table class="table table-striped varlist">
<thead><tr><th>Type</th><th>Visibility</th>

<th>Attributes</th><th></th><th>Name</th><th></th><th>Initial</th><th></th></thead>



<tbody>

  
  
  
  
<tr>
  
  <td><span class="anchor" id="variable-i10"></span>integer,</td>
  
  <td>public</td>
  <td></td><td>::</td>
  <td><strong>i10</strong></td><td></td><td></td><td></td>
  
</tr>

</tbody>
</table>

    </section>
    <br>
    
    
    
    
    

    
    
    
    
    


    
    
    
    <section>
    <h2><span class="anchor" id="src"></span>Source Code</h2>
    <div class="highlight"><pre><span></span><span class="k">elemental </span><span class="kt">integer </span><span class="k">function </span><span class="n">len_white</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="c">!  DEPRECATED. Use len_trim(3f),trim(3f) unless you might have trailing nulls (common when interacting with C procedures)&quot;</span>
<span class="c">!  John S. Urban, 1984, 1997-12-31</span>
<span class="c">!  Note that if the string is blank, a length of 0 is returned; which is not a legal string length in Fortran77.</span>
<span class="c">!  this routine used to return one instead of zero.</span>
<span class="c">!   - mod 1:     1994</span>
<span class="c">!                added null (char(0)) because HP and some Suns not padding</span>
<span class="c">!                strings with blank, but with null characters; 1994 JSU</span>
<span class="c">!   - mod 2:     1999</span>
<span class="c">!                update syntax with INTENT(), ENDDO, no RETURN</span>
<span class="c">!                still need instead of LEN_TRIM() because some systems stil pad CHARACTER with NULL</span>
<span class="c">!-----------------------------------------------------------------------------------------------------------------------------------</span>

<span class="c">! ident_15=&quot;@(#)M_strings::len_white(3f): return position of last non-blank/non-null character in string&quot;</span>

<span class="kt">character</span><span class="p">(</span><span class="nb">len</span><span class="o">=*</span><span class="p">),</span><span class="k">intent</span><span class="p">(</span><span class="n">in</span><span class="p">)</span><span class="kd">::</span> <span class="n">string</span> <span class="c">! input string to determine length of</span>
<span class="kt">integer</span>                    <span class="kd">::</span> <span class="n">i10</span>
<span class="k">intrinsic </span><span class="nb">len</span>
<span class="nb">   </span><span class="n">len_white</span><span class="o">=</span><span class="mi">0</span>
   <span class="k">do </span><span class="n">i10</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">string</span><span class="p">),</span><span class="mi">1</span><span class="p">,</span><span class="o">-</span><span class="mi">1</span>
      <span class="k">select case</span><span class="p">(</span><span class="n">string</span><span class="p">(</span><span class="n">i10</span><span class="p">:</span><span class="n">i10</span><span class="p">))</span>
      <span class="k">case</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>                 <span class="c">! space(32)</span>
      <span class="k">case</span><span class="p">(</span><span class="nb">char</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>             <span class="c">! null(0)</span>
      <span class="k">case</span><span class="p">(</span><span class="nb">char</span><span class="p">(</span><span class="mi">9</span><span class="p">):</span><span class="nb">char</span><span class="p">(</span><span class="mi">13</span><span class="p">))</span>    <span class="c">! tab(9), new line(10), vertical tab(11), formfeed(12), carriage return(13)</span>
      <span class="k">case </span><span class="n">default</span>
         <span class="n">len_white</span><span class="o">=</span><span class="n">i10</span>
         <span class="k">exit</span>
<span class="k">      end select</span>
<span class="k">   enddo</span>
<span class="k">end function </span><span class="n">len_white</span>
</pre></div>

    </section>
    <br>
    
    
    </div>
  </div>


    <hr>    
    </div> <!-- /container -->
    <footer>
      <div class="container">
      <div class="row">
        <div class="col-xs-6 col-md-4"><p>&copy; 2022 
                                          </p></div>
        <div class="col-xs-6 col-md-4 col-md-push-4">
          <p class="text-right">
            Documentation generated by 
            <a href="https://github.com/cmacmackin/ford">FORD</a>
             on 2022-01-16 22:32  
          </p>
        </div>
        <div class="col-xs-12 col-md-4 col-md-pull-4"><p class="text-center"> M_strings was developed by John S. Urban</p></div>
      </div>
      <br>
      </div> <!-- /container -->    
    </footer>

    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
<!--
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
-->
    <script src="../js/bootstrap.min.js"></script>
    <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    <script src="../js/ie10-viewport-bug-workaround.js"></script>

    <!-- MathJax JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script type="text/x-mathjax-config">
      MathJax.Hub.Config({
        TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'AMS' } },
        jax: ['input/TeX','input/MathML','output/HTML-CSS'],
        extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']
      });
    </script>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    
    
    <script src="../tipuesearch/tipuesearch_content.js"></script>
    <script src="../tipuesearch/tipuesearch_set.js"></script>
    <script src="../tipuesearch/tipuesearch.js"></script>
    
    
  </body>
</html>